package ciudad;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import obstrucciones.*;

@XmlRootElement
public class Calle {
	private Esquina esquinaDerecha = null;
	private Esquina esquinaIzquierda = null;
	private List<Obstruccion> obstrucciones = new ArrayList<Obstruccion>();
	
	/* Setea la esquina derecha de la calle por la esquina pasada por parametro. */
	@XmlTransient
	public void setEsquinaDerecha(Esquina esquinaDerecha) {
		this.esquinaDerecha = esquinaDerecha;
	}
	
	/* Devuelve la esquinaDerecha de la calle. */
	public Esquina getEsquinaDerecha() {
		return this.esquinaDerecha;
	}
	
	/* Setea la esquina izquierda de la calle por la esquina pasada por parametro. */
	@XmlTransient
	public void setEsquinaIzquierda(Esquina esquinaIzquierda) {
		this.esquinaIzquierda = esquinaIzquierda;
	}

	/* Devuelve la esquinaIzquierda de la calle. */
	public Esquina getEsquinaIzquierda() {
		return this.esquinaIzquierda;
	}
	
	/* Setea la lista de obstrucciones por la lista pasada por parametro. */
	@XmlElementWrapper(name = "obstrucciones")
	@XmlElement
	public void setObstrucciones(List<Obstruccion> obstrucciones){
		this.obstrucciones = obstrucciones;
	}
	
	/* Devuelve la lista de obstrucciones. */
	public List<Obstruccion> getObstrucciones () {
		if (this.obstrucciones.size() == 0) return null;
		return this.obstrucciones;
	}
	
	/* Agrega la obstruccion pasada por parametro a la lista de obstrucciones. */
	public void agregarObstruccion (Obstruccion obstruccion) {
		this.obstrucciones.add (obstruccion);
	}
	
	/* Devuelve true si no existen obstrucciones en la calle
	 * y false en caso contrario. */
	public Boolean sinObstrucciones () {
		if (this.obstrucciones.size() == 0) return true;
		return false;
	}

	/* Devuelve la cantidad de obstrucciones de la calle. */
	public int getCantidadDeObstrucciones() {
		return this.obstrucciones.size ();
	}
}
